// 生命周期（默认都有生命周期）：目标避免悬垂引用（要用内存的时候，内存已经被清理掉了）保证内存安全
// rust借用检查器，检查借用作用域是否合法
// 标注生命周期例如：'a，单引号开头并且全小写且比较短，一般在&的后面使用空格符和引用类型分开
// 单个生命周期标注本身没有意义
// 函数被外部调用或者调用外部方法的代码生命周期会变化，因此需要标注
// struct生命周期
// 生命周期规则：如果代码规范就不用写生命周期标注
// 1.每个引用类型都有自己的生命周期
// 2.如果只有一个输入生命周期参数，那么改生命周期被付给所有的输出生命周期参数
// 3.如果有多个输入生命周期参数，但其中一个是&self或&mut self（是方法），那么self的生命周期会被赋值给所有的输出生命周期
// 'static：静态声明周期即整个程序持续的时间：所有的字符串字面值都有'static生命周期
// 生命周期也是泛型的一种


struct testStruct<'a> {
    test: &'a String
}
// 这里的'a是x和y中两个生命周期中最小的那个
fn longest<'a>(x:&'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    println!("hello world");
}